home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
tcombo.exe
/
TCOMBOBX.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-18
|
6KB
|
177 lines
/*************************************************************************/
/* */
/* TCOMBOBX.CPP */
/* */
/* Copyright (c) 1992, Vincent J. Dentice */
/* All rights reserved */
/* */
/* The TComboBox class is an extension to Borland International's Turbo */
/* Vision Applications Framework for DOS. It provides a class that */
/* acts like a Combo Box in other graphical environments like Microsoft */
/* Windows and IBM OS/2. */
/* */
/* It is designed to be with a TDialog class and a TCollection Class. */
/* */
/* */
/* Date Prg Ver Description */
/* -------- --- --- ------------------------------------------------- */
/* 09/30/92 VJD 0.1 Initial module definition. */
/* 11/16/92 VJD 0.2 Added streamability to the TComboBox classes. */
/* Rewrote header files to behave like original */
/* Turbo Vision header files. */
/* 11/17/92 VJD 0.3 Added functions dataSize, getData and setData. */
/* 11/18/92 RG 0.3 Added code to select the correct item when the */
/* TComboWindow comes up. These code modifications */
/* where supplied by Robert Gloeckner (100034,3033). */
/* */
/*************************************************************************/
#define Uses_TComboBox
#define Uses_TComboWindow
#define Uses_TKeys
#define Uses_TStreamableClass
#include "tcombobx.h"
#include <string.h>
#define cpComboBox "\x16"
char* TComboBox::icon = "\x19";
TComboBox::TComboBox(const TRect& bounds, TInputLine *aLink, TCollection *aList) :
TView(bounds)
{
options |= ofPostProcess;
eventMask |= evBroadcast;
link = aLink;
list = aList;
}
void TComboBox::shutDown()
{
link = 0;
TView::shutDown();
}
ushort TComboBox::dataSize()
{
return sizeof(void *);
}
void TComboBox::draw()
{
TDrawBuffer b;
b.moveStr(0, icon, getColor(0x01));
writeLine(0, 0, size.x, size.y, b);
}
void TComboBox::getData(void *rec)
{
// TCollection **p = (TCollection **)rec;
// *p = list;
*(TCollection **)rec = list;
}
TPalette& TComboBox::getPalette() const
{
static TPalette palette(cpComboBox, sizeof(cpComboBox)-1);
return palette;
}
void TComboBox::handleEvent(TEvent& event)
{
TComboWindow *ComboWindow;
TRect r, p;
ushort c;
TView::handleEvent(event);
if ((event.what == evMouseDown) ||
(event.what == evKeyDown && ctrlToArrow(event.keyDown.keyCode) == kbDown
&& (link->state & sfFocused) != 0))
{
if (strlen(link->data)) // If length of link->data > 0,
list->insert(newStr(link->data)); // add new data to list
link->select(); // Make InputLine the active view
r = link->getBounds(); // Get bounds of the InputLine
r.b.x += 1; // Extend x bound by 1
r.a.y += 1; // Move bound down by 1
r.b.y += 7; // Extend y bound by 7
p = owner->getExtent(); // Get extent of the Dialog Box
r.intersect(p); // Get intersection of Dialog and r
r.b.y -= 1;
ComboWindow = new TComboWindow(r, list); // Create a new TComboWindow
if (ComboWindow != 0) {
if (strlen(link->data))
ComboWindow->setSelection(link->data);
c = owner->execView(ComboWindow); // Execute TComboWindow as modal view
if (c == cmOK) { // If TComboWindow return cmOK
char rslt[256];
ComboWindow->getSelection(rslt); // Set the link data to the selection
strncpy(link->data, rslt, link->maxLen);
link->selectAll(True); // Select all in the linked view
link->drawView(); // Redraw the linked view
}
destroy(ComboWindow);
}
clearEvent(event);
}
else if (event.what == evBroadcast)
if ((event.message.command == cmReleasedFocus && event.message.infoPtr == link)
|| (event.message.command == cmRecordHistory))
if (strlen(link->data)) // If length of link->data > 0,
list->insert(newStr(link->data)); // add new data to list
}
void TComboBox::newList(TCollection *aList)
{
if (list)
destroy(list);
list = aList;
}
void TComboBox::setData(void *rec)
{
TCollection *p = (TCollection *)rec;
newList(p);
}
void TComboBox::write(opstream& os)
{
TView::write(os);
os << link << list;
}
void *TComboBox::read(ipstream& is)
{
TView::read(is);
is >> link >> list;
return this;
}
TStreamable *TComboBox::build()
{
return new TComboBox(streamableInit);
}
TComboBox::TComboBox(StreamableInit) : TView(streamableInit) { }